package com.rem.se.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 根据反射创建对象
 * 所有私有方法   私有字段   私有构造 想要赋值就需要关闭安全检查
 *
 * @author Rem
 * @date 2021-03-15
 */

public class Demo07 {
    public static void main(String[] args) throws Exception {
        Class<?> c1 = Class.forName("com.rem.se.reflect.User");

        //本质是创建无参构造
        User user = (User) c1.newInstance();
        System.out.println("创建对象:" + user);


        Constructor<?> constructor = c1.getDeclaredConstructor(String.class);
        User user2 = (User) constructor.newInstance("zhangsan");
        System.out.println("通过构造器创建对象:" + user2);


        Method setAge = c1.getDeclaredMethod("setAge", Integer.class);
        //根据方法向对象赋值
        setAge.invoke(user, 18);
        System.out.println("赋值setAge方法的对象:" + user);

        Field name = c1.getDeclaredField("name");
        //所有私有方法 私有字段   私有构造    想要赋值就需要关闭安全检查
        name.setAccessible(true);
        name.set(user, "成风");
        System.out.println("赋值name字段的对象:" + user);

    }
}
